package com.aruba.socketlibrary.entity;


import com.aruba.socketlibrary.utils.Tools;

/**
 * Created by aruba on 2017/10/20.
 */

public class SerialFileBase {
    /**
     * 文件内容状态，
     * 0x00代表请求的文件内容有效，
     * 0x01代表请求的文件内容无效(物理文件可能已经被删除/下标溢出等原因)
     */
    private byte flag;
    /**
     * 文件类型
     * 0x10~0x1F--表示程序相关文件(中心下发到PND的文件)
     * 0x20~0x2F--表示运营证相关文件(中心下发到PND的文件)
     * 0x30~0x3F--表示广告相关文件(中心下发到PND的文件)
     * 0x01—表示拍照文件(PND上传到中心的文件)
     * 0x02—表示录音文件(PND上传到中心的文件)
     * 0x03—表示录像文件(PND上传到中心的文件)
     * 0x04—表示日志文件(PND上传到中心的文件)
     * 0x05—表示压缩定位数据包(PND上传到中心的文件)
     * 0x06—表示PND配置文件(PND上传到中心的文件)
     * 0x07—表示PND数据库文件(PND上传到中心的文件)
     * 0xFF—表示其它文件
     */
    private byte type;
    /**
     * 文件名长度
     */
    private int fileNameLength;
    /**
     * 文件名
     */
    private String fileName;

    public byte getFlag() {
        return flag;
    }

    public void setFlag(byte flag) {
        this.flag = flag;
    }

    public byte getType() {
        return type;
    }

    public void setType(byte type) {
        this.type = type;
    }

    public int getFileNameLength() {
        return fileNameLength;
    }

    public void setFileNameLength(int fileNameLength) {
        this.fileNameLength = fileNameLength;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    /**
     * 解析flag，type，filelength，filename
     *
     * @param data
     * @return
     */
    public boolean parseData(byte[] data) {
        try {
            setFlag(data[0]);
            setType(data[1]);
            setFileNameLength(data[2] & 0xff);

            byte[] fileNameBytes = new byte[getFileNameLength()];
            System.arraycopy(data, 3, fileNameBytes, 0, getFileNameLength());
            setFileName(Tools.AsciiByte2String(fileNameBytes));
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }
}
